package com.java.web.util;

import java.io.InputStream;
import java.io.OutputStream;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class ExcelUtils {

	/**
	 * 获得excel的内容
	 * 
	 * @Method: getExcelContent
	 * @Description: TODO
	 * @param inputStream
	 * @return
	 * @return:String
	 */
	public static String readExcel(InputStream inputStream) {
		Workbook book = null;
		try {
			book = Workbook.getWorkbook(inputStream);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		// 表单对象
		Sheet sheets[] = book.getSheets();
		String str = "";
		for (int i = 0; i < sheets.length; i++) {
			Sheet sheet = sheets[i];
			// 表单名称
			String sheetName = sheet.getName();
			str += "\n" + sheetName + "\n";
			// 一个sheet总的行数
			int rows = sheet.getRows();
			for (int j = 0; j < rows; j++) {
				// 每行单元格
				Cell[] cells = sheet.getRow(j);
				for (int k = 0; k < cells.length; k++) {
					String cellValue = cells[k].getContents();
					str += cellValue + " ";
				}
				str += "\n";
			}

		}
		// 最后关闭资源，释放内存
		book.close();
		return str;
	}

	/**
	 * 生成excel文件
	 * @Method: writeExcel 
	 * @Description: TODO
	 * @param outputStream
	 * @param rowsColumns
	 * @return:void
	 */
	public static void writeExcel(OutputStream outputStream,
			String rowsColumns[][]) {
		WritableWorkbook wwb = null;
		try {
			// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
			wwb = Workbook.createWorkbook(outputStream);
			if (wwb != null) {
				// 创建一个可写入的工作表
				// Workbook的createSheet方法有两个参数，第一个是工作表的名称，第二个是工作表在工作薄中的位置
				WritableSheet ws = wwb.createSheet("sheet1", 0);
				// 下面开始添加单元格
				for (int i = 0; i < rowsColumns.length; i++) {
					for (int j = 0; j < rowsColumns[i].length; j++) {
						// 这里需要注意的是，在Excel中，第一个参数表示列，第二个表示行
						Label labelC = new Label(j, i, rowsColumns[i][j]);
						// 将生成的单元格添加到工作表中
						ws.addCell(labelC);
					}
				}

				// 从内存中写入文件中
				wwb.write();
				outputStream.flush();
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			// 关闭资源，释放内存
			try {
				wwb.close();
		        outputStream.close();
			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

	}

}
